HashiCorp公式のTerraformチュートリアル(AWS)をやってみた
本記事では、HashiCorpの公式サイトで公開されているTerraform Tutorials「Get Started - AWS」の内容を紹介します。
少し環境を変えて実施したい方向けに、サンプルコードも共有します。
Terraform Tutorialsについて
HashiCorpの公式サイトでは、HashiCorp製品のチュートリアルが提供されています。
本ブログでは、AWSのチュートリアルを紹介しますが、サイト上にはAzureやGoogle Cloud、OCI版のチュートリアルも用意されています。
普段使っているクラウドサービスを使ってチュートリアルを実行することが可能です。
HCP TerraformやTerraformの認定試験向けの内容も用意されています。
チュートリアルの概要
Terraformの基本を学び、AWS環境にリソース(EC2)をデプロイすることを体験できるハンズオン形式のチュートリアルです。
- 所要時間: 約1時間
- 難易度: 初級
- 前提知識: AWSの基本的な知識
事前準備
以下を事前に準備しておきます。
- AWSアカウント
- ローカルPCにAWS CLIのインストール
- リソース作成権限が付与された、AWSアカウント認証情報
チュートリアル中でt2.micro
のEC2インスタンスを1台作成します。
無料利用枠で収まる場合もあるかと思いますが、料金が発生する可能性もあります。
オプション: tenvの導入
Terraformのインストール等は、チュートリアル上でも手順があります。
Terraformを直接インストールする手順が紹介されています。
複数の環境でTerraformを使っていいて、それぞれ異なるバージョンを使っている場合、バージョン切り替えを楽にしたいときがあります。
バージョン管理ツールを導入することで、切り替えが楽になります。
tenvはTerraformのバージョン管理ツールです。これを機に導入しておくのが良いと思います。
内容
章 | 内容 | 備考 |
---|---|---|
What is Infrastructure as Code with Terraform? | IaCやTerraformの概要 | インタラクティブラボがついていますが、後の章「Build」と同じ内容のためスキップしてもOK |
Install | Terraformのインストール方法、ローカルDockerをTerraformで管理 | PowerShellでTerraformの入力補完を有効化したい場合は以下を参照 PowerShellでTerraformの入力補完(Auto Complete)を有効にする |
Build | リソース(EC2)を作成 | |
Change | リソース(EC2)の設定を変更 | |
Destroy | リソース(EC2)を削除 | |
Variable | リソース(EC2 Nameタグ)設定を変数化 | |
Outputs | リソース(EC2 インスタンスID・パブリックIPアドレス)の設定値を出力 | |
Remote state | State管理をローカルからHCP Terraformに移行 | HCP Terraformが必要(Freeプラン可) Home - HCP Terraform | Terraform | HashiCorp Developer |
サンプルコード
以下の要望もあるかと思い、サンプルコードを作ってみました。
- リージョン(チュートリアル内だとus-west-2)を変えて実行したい
- AWSアカウント内にデフォルトVPCが存在しない
- チュートリアル内に手動で作る手順はあるが、せっかくならTerraformでやりたい
ハンズオン「Build」でお使いください。そのまま、以降の手順も実施可能です。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "ap-northeast-1"
}
# 追加: VPC関連リソースを作成
resource "aws_vpc" "this" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "this" {
vpc_id = aws_vpc.this.id
cidr_block = "10.0.0.0/20"
}
# 追加: 空のセキュリティグループ作成
resource "aws_security_group" "this" {
name = "ExampleAppServerInstance"
vpc_id = aws_vpc.this.id
}
resource "aws_instance" "app_server" {
ami = "ami-0c6359fd9eb30edcf"
# ami = "ami-0f75d1a8c9141bd00" # 置き換え
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.this.id] # 追加
subnet_id = aws_subnet.this.id # 追加
tags = {
Name = "ExampleAppServerInstance"
}
}
サンプルコードのリージョンは、ap-northeast-1
としました。
他のリージョンでやりたい場合は、コード内のregion
とami
を置き換えてください。
AMI IDを簡単に取得したい場合は、以下のコマンドをお使いください。
Amazon Linux2023の最新と一つ前のAMI IDを取得できます。
aws ec2 describe-images \
--owners amazon \
--filters "Name=name,Values=al2023-ami-2023.*-x86_64" "Name=state,Values=available" \
--query "sort_by(Images, &CreationDate)[-2:].ImageId"
感想
Terraformの基本がコンパクトにまとまっており、良いチュートリアルでした。
これからTerraformを始めたい方へのファーストステップとしてオススメです。
次のステップとしては、同サイト上の他のチュートリアルをやってみるのが良いと思います。
「Fundamentals」のチュートリアルはどれもTerraformを使う上で役立つので、ぜひやってみてほしいです。
以上、AWS事業本部の佐藤(@chari7311)でした。